<html>
    <head>
        <title>将Swagger与OIDC一起使用</title>
    </head>
    <body>
        <script>
              /*
                       四、将Swagger与OIDC一起使用

                                您可能还想使用OpenIdConnect而不是OAUTH配置swagger。

                                当您需要配置与颁发者不同的元数据地址时，这尤其有用，例如当您将应用程序部署到kubernetes集群或docker时。

                                在这些情况下，元数据地址将用于登录过程，以通过Internet到达有效的身份验证服务器发现端点，并使用内部网络验证获得的令牌。

                                为此，我们需要使用AddAbpSwaggerGenWithOidc扩展来配置带有OAuth颁发者的Swagger，并在模块的ConfigureServices方法中配置范围：

                                                    context.Services.AddAbpSwaggerGenWithOidc(
                                                    configuration["AuthServer:Authority"],
                                                    scopes: new[] { "SwaggerDemo" },
                                                    // "authorization_code"
                                                    flows: new[] { AbpSwaggerOidcFlows.AuthorizationCode },
                                                    // When deployed on K8s, should be metadata URL of the reachable DNS over internet like https://myauthserver.company.com
                                                    discoveryEndpoint: configuration["AuthServer:Authority"],
                                                    options =>
                                                    {
                                                        options.SwaggerDoc("v1", new OpenApiInfo { Title = "SwaggerDemo API", Version = "v1" });
                                                        options.DocInclusionPredicate((docName, description) => true);
                                                        options.CustomSchemaIds(type => type.FullName);
                                                    });


                                lows是oidc提供程序（Authserver）支持的默认oidc流列表。
                                
                                您可以在下面看到默认支持的流程：

                                            ①、AbpSwaggerOidcFlows.AuthorizationCode："authorization_code"流是默认和建议的流。
                                            
                                                        即使有字段也不需要客户端机密。

                                            ②、AbpSwaggerOidcFlows.Implicit：用于javascript应用程序的已弃用的"implicit"流。


                                            ③、AbpSwaggerOidcFlows.Password：遗留的password流，也称为资源所有者密码流。您需要为其提供用户名、密码和客户端机密。

                                            ④、AbpSwaggerOidcFlows.ClientCredentials：用于服务器到服务器交互的"client_credentials"流。

                                您可以定义一个或多个将在授权模式中显示的流。您可以将其设置为null，这将使用默认的“authorization_code”流。

                                discoveryEndpoint是.well-known/openid-configuration。

                                您可以将其设置为null，这将使用默认的AuthServer：授权应用程序配置。
                                
                                如果您将应用程序部署到kubernetes集群或docker群，您应该将discoveryEndpoint设置为可以通过Internet访问的真实DNS。


                                
                   */
        </script>
    </body>
</html>